package org.ikross.twitter.connector.factory;

import org.ikross.twitter.connector.IConnector;
import org.ikross.twitter.exception.IllegalConnectorFactoryArgumentException;
import org.ikross.twitter.exception.ConnectorException;
import org.ikross.twitter.session.Session;

public interface IConnectorFactory {

	public void setSession(Session session) throws IllegalConnectorFactoryArgumentException;

	public Session getSession();
	
	public void destroySession();

	/**
	 * Returns the 20 most recent statuses from non-protected users who have set a custom user icon.  Does not require authentication.
	 * URL: http://twitter.com/statuses/public_timeline.format
	 * Formats: xml, json, rss, atom 
	 * API limit: Not applicable
	 * @return The Connector
	 */
	public IConnector createPublicTimeLineConnector() throws ConnectorException;

	/**
	 * Returns the 20 most recent statuses posted by the authenticating user and that user's friends. This is the equivalent of /home on the Web.
	 * URL: http://twitter.com/statuses/friends_timeline.format
	 * Formats: xml, json, rss, atom
	 * API Limit: 1 per request 
	 * Parameters:
	 * 		since.  Optional.  Narrows the returned results to just those statuses created after the specified HTTP-formatted date.  The same behavior is available by setting an If-Modified-Since header in your HTTP request.  Ex: http://twitter.com/statuses/friends_timeline.rss?since=Tue%2C+27+Mar+2007+22%3A55%3A48+GMT
	 * 		since_id.  Optional.  Returns only statuses with an ID greater than (that is, more recent than) the specified ID.  Ex: http://twitter.com/statuses/friends_timeline.xml?since_id=12345
	 * 		count.  Optional.  Specifies the number of statuses to retrieve. May not be greater than 200.  Ex: http://twitter.com/statuses/friends_timeline.xml?count=5 
	 * 		page. Optional. Ex: http://twitter.com/statuses/friends_timeline.rss?page=3
	 * @return The Connector
	 * @throws ConnectorException
	 */
	public IConnector createFriendsTimeLineConnector() throws ConnectorException;

	public IConnector createUserTimeLineConnector() throws ConnectorException;

	public IConnector createGetUpdateConnector(String idUpdate) throws ConnectorException;

	public IConnector createUpdateConnector(String status) throws ConnectorException;

	public IConnector createGetRepliesConnector() throws ConnectorException;

	public IConnector createDestroyUpdateConnector(String idUpdate) throws ConnectorException;

	public IConnector createGetFriendsConnector() throws ConnectorException;

	public IConnector createGetFollowersConnector() throws ConnectorException;

	public IConnector createGetFeaturedUsersConnector() throws ConnectorException;

	public IConnector createGetUserConnector(String id) throws ConnectorException;

	public IConnector createGetReceivedDirectMessagesConnector() throws ConnectorException;

	public IConnector createGetSentDirectMessagesConnector() throws ConnectorException;

	public IConnector createSendDirectMessageConnector(String recipient, String message) throws ConnectorException;

	public IConnector createDestroyDirectMessageConnector(String idDirectMessage) throws ConnectorException;

	public IConnector createNewFriendshipConnector(String idUser) throws ConnectorException;

	public IConnector createDestroyFriendshipConnector(String idUser) throws ConnectorException;

	public IConnector createConfirmFriendshipConnector(String idUserA, String idUserB) throws ConnectorException;

	public IConnector createVerifyCredentialsConnector() throws ConnectorException;

	public IConnector createEndSessionConnector() throws ConnectorException;

	public IConnector createGetArchiveConnector() throws ConnectorException;

	public IConnector createUpdateLocationGETConnector(String location) throws ConnectorException;

	public IConnector createUpdateLocationPOSTConnector(String location) throws ConnectorException;

	public IConnector createUpdateDeliveryDeviceConnector(String deliveryDevice) throws ConnectorException;

	public IConnector createRateLimitStatusConnector() throws ConnectorException;

	public IConnector createGetFavoritesConnector() throws ConnectorException;

	public IConnector createSetFavoriteConnector(String idUpdate) throws ConnectorException;

	public IConnector createDestroyFavoriteConnector(String idUpdate) throws ConnectorException;

	public IConnector createFollowUserConnector(String idUser) throws ConnectorException;

	public IConnector createUnfollowUserConnector(String idUser) throws ConnectorException;

	public IConnector createBlockUserConnector(String idUser) throws ConnectorException;

	public IConnector createUnblockUserConnector(String idUser) throws ConnectorException;

	public IConnector createTestConnector() throws ConnectorException;

	public IConnector createDowntimeScheduleConnector() throws ConnectorException;
}